package com.doit.day06


object _08_隐式转换 {
  def main(args: Array[String]): Unit = {
    //隐式参数
    //这个方法的参数就叫做隐式参数
    /*
    //  def add1(a:Int)(implicit b:String)={a+b.toInt}
    //    implicit val a:String = "10"
     def add(a:Int,b:Int)={a+b}
        val res: Int = add(1, 2)
        println(res)
        //隐式变量，我去上下文中找，只能找到一个，如果找到了两个，我就不懂传哪一个了
    //    println(add1(1))//40*/


    //隐式方法
    //如果一个方法是一个隐式方法  在def前面加一个implicit关键字
    //方法有参数  返回值是一个对象
    //那么，这个参数的类型所有的对象都拥有返回值类型中的所有方法
    implicit def str2Bird(str: Int) = {
     ""
    }

    //所有的字符串都拥有bird1这个类中所有的方法

//    "".fly()
//    "".siyi()
//    "".xiaQi()
    //我想让数字10 有 concat
//    10.concat("1")

    implicit class snake(ant:Ant){
      def eatElephant()={
        println("i can eat elephant!!")
      }
    }

    val ant: Ant = new Ant
    ant.eatElephant()

  }
}


class Ant

class Bird1(str: String) {
  def fly() = {
    println(str + ":我会飞")
  }

  def siyi(): Unit ={
    println("aaa")
  }
}